草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

Java ConcurrentHashMap 不是线程安全的..wth?

我之前用的是HashMappublicMapclients=newHashMap();现在我已经切换到ConcurrentHashMap以避免同步块(synchronizedblock),现在我遇到了问题我的服务器每秒200-400个并发客户端负载很重,预计会随着时间的推移而增长。现在看起来像这样publicConcurrentHashMapclients=newConcurrentHashMap();我的服务器设计是这样的。我有一个用于处理大量数据包的工作线程。每个数据包都使用packetHandler子例程(不是线程的一部分)进行检查,几乎任何客户端都可以在任何时候调用它,它几乎像

java - 如何更改 ExecutorService 中的线程名称?

这个问题在这里已经有了答案:Namingthreadsandthread-poolsofExecutorService(20个答案)关闭5年前。我正在使用ExecutorService来执行一些Callable,但线程的名称类似于fixed-pool-1-thread-1。如何更改线程的名称?如果不可能,还有另一种方法来执行我可以设置线程名称的Callables吗?

java - Java线程是在用户空间还是内核空间创建的?

检查这段代码Threadt1=newThread(newRunnable(){@Overridepublicvoidrun(){try{System.out.println("STARTINGSERVER...");ServerSockets=newServerSocket(2544);System.out.println("SERVERBLOCKEDONACCEPT");Socketss=s.accept();System.out.println("SERVERNOTBLOCKEDANYMORE");}catch(Exceptionex){ex.printStackTrace();}

java - 使 DateFormat 线程安全。使用什么,同步或线程本地

我想让以下代码线程安全。实现它的最佳方法是什么?privatestaticfinalDateFormatDATE_FORMAT=DateFormat.getDateTimeInstance();publicstaticfinalStringeventTypeToDateTimeString(longtimestamp){returnDATE_FORMAT.format(newDate(timestamp));} 最佳答案 避免使用旧的日期时间类Java最早版本捆绑的麻烦的旧日期时间类已被java.time类所取代。java.time

java - 我如何从 Java 中的另一个线程杀死一个线程?

我正在从主线程调用两个线程,称它们为线程1和线程2。当线程1停止时,我也想停止或终止线程2。我该怎么做?我想要的实际输出发生了变化。那就是有一个主类也是线程。从主类我调用thread1和thread2。我从主类给thread1输入但是当这个输入被改变时,我想杀死正在运行的线程1并用另一个输入再次启动它。第二个线程,线程2将使用线程1给出的输出运行。所以最终当第一个线程被杀死时,第二个线程将运行但只有当t6here是该线程的输入时才会给出输出。 最佳答案 Java弃用了显式终止另一个线程的方法(如Thread.stop/Thread.

java - PrintWriter 是线程安全的吗?

鉴于以下情况:publicclassCConsole{publicstaticPrintWriterpw=newPrintWriter(System.out,true);}CConsole.pw.format("%d%d",x,y)是线程安全的吗?也就是说,多个线程是否可以使用此调用以及它在哪里被描述为线程安全的。我在PrintWriter类描述和format()方法描述中都没有看到它。 最佳答案 这个问题没有简单的答案...Writer,这是PrintWriter的父类(superclass)在其构造函数文档中明确提到所有关键部分

java - 无需重新启动即可生成 Java 线程转储。

我想创建一个线程来跟踪内存使用情况和cpu使用情况。如果应用程序达到高级别,我想生成堆转储或线程转储。有没有办法在不重启的情况下生成线程转储运行时? 最佳答案 以下是我们如何以编程方式执行此操作:http://pastebin.com/uS5jYpd4我们使用JMXThreadMXBean和ThreadInfo类:ThreadMXBeanmxBean=ManagementFactory.getThreadMXBean();ThreadInfo[]threadInfos=mxBean.getThreadInfo(mxBean.getA

java - 线程 "main"java.util.ConcurrentModificationException 中的异常

当我运行下面的代码时,出现异常。我进行了搜索,但找不到任何解决方案。Exceptioninthread"main"java.util.ConcurrentModificationExceptionatjava.util.HashMap$HashIterator.nextEntry(UnknownSource)atjava.util.HashMap$KeyIterator.next(UnknownSource)atcom.aybits.software.linkgrabber.Grabber.main(Grabber.java:45)第45行是for(StringlinkFromColl

java - 当有多个 quartz 线程时,让 quartz 只在一个线程中执行作业

我想知道是否可以将quartz配置为在任何给定时间执行仅在一个线程中运行的长时间处理作业。换句话说,假设我配置了大小为5的SimpleThreadPool的quartz。我有一个作业每10秒触发一次,但在某些情况下可能需要超过10秒才能完成。有没有办法配置quartz触发器/作业/调度程序,以便该触发器不会再次触发,因为它已经在另一个线程中处于运行状态。当触发器再次触发时,池中的另一个线程将拾取它并同时运行同一作业的两个实例。感谢您的输入。澄清:(关于使用大小为1的线程池的建议)。要求是将线程池配置为5个线程,并且任何单个作业在任何给定时间仅在单个线程中执行,换句话说,一个作业的实例应

java - 线程join()不等待

我正在尝试了解线程,但我不了解join()方法。我有一个线程(ThreadAdd.java),它将一个静态整数加1。publicclassThreadAddextendsThread{publicstaticintcount;@Overridepublicvoidrun(){try{Thread.sleep(100);}catch(InterruptedExceptionex){Logger.getLogger(ThreadAdd.class.getName()).log(Level.SEVERE,null,ex);}ThreadAdd.count++;}}在我的main方法中,我启动